package cn.itcast.dao;

import cn.itcast.pojo.Menu;
import cn.itcast.pojo.Role;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface MenuDao {

    /**
     * 所有的根菜单
     * @return {@link Page<Menu>}
     */
    Page<Menu> findAllParentChildrenMenu();

    /**
     * 找到所有菜单
     *
     * @return {@link Page<Menu>}
     */
    Page<Menu> findAll();

    /**
     * 通过id找到菜单
     *
     * @param id id
     * @return {@link Menu}
     */
    Menu findMenuById(String id);

    /**
     * 通过菜单找到权限id的集合
     *
     * @param id id
     * @return {@link Integer[]}
     */
    Integer[] findPermissionByMenuId(Integer id);

    /**
     * 添加菜单
     *
     * @param menu 菜单
     */
    void saveMenu(Menu menu);

    /**
     * 保存菜单和许可
     * 保存菜单和许可  操作中间表
     *
     * @param menuId       菜单id
     * @param permissionId 权限id
     */
    void saveMenuAndPermission(@Param("menu_id") Integer menuId, @Param("permission_id")Integer permissionId);

    /**
     * 更新菜单
     *
     * @param menu 菜单
     */
    void updateMenu(Menu menu);

    /**
     * 删除权限的菜单id
     */
    void deletePermissionByMenuId(Integer id);

    /**
     * 通过父菜单id查询子菜单信息
     *
     * @param id id
     * @return {@link List<Menu>}
     */
    List<Menu> findChildrenMenu(Integer id);

    /**
     * 删除菜单通过主键id
     *
     * @param id id
     */
    void deleteMenuById(Integer id);

    /**
     * 由父菜单id删除菜单
     *
     * @param id id
     */
    void deleteMenuByParentMenuId(Integer id);
}
